GtkSettings: Add a private getter for the source
authorMatthias Clasen <mclasen@redhat.com>
Fri, 19 Sep 2014 12:41:06 +0000 (08:41 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 22 Sep 2014 23:40:49 +0000 (19:40 -0400)
Settings have a little more metadata than plain properties. They
can come from different sources. Make this information available
so we can show it in the inspector.

https://bugzilla.gnome.org/show_bug.cgi?id=736971

gtk/gtksettings.c
gtk/gtksettingsprivate.h

index d35c1811c3034596148b5d525fad0654b137d28b..6f69576c4246687f78f5cc64dc3f6fef39cde908 100644 (file)
@@ -120,14 +120,6 @@ struct _GtkSettingsPrivate
   GtkCssProvider *key_theme_provider;
 };
 
-typedef enum
-{
-  GTK_SETTINGS_SOURCE_DEFAULT,
-  GTK_SETTINGS_SOURCE_THEME,
-  GTK_SETTINGS_SOURCE_XSETTING,
-  GTK_SETTINGS_SOURCE_APPLICATION
-} GtkSettingsSource;
-
 struct _GtkSettingsValuePrivate
 {
   GtkSettingsValue public;
@@ -3213,3 +3205,32 @@ gtk_settings_load_from_key_file (GtkSettings       *settings,
   g_strfreev (keys);
   g_key_file_free (keyfile);
 }
+
+GtkSettingsSource
+_gtk_settings_get_setting_source (GtkSettings *settings,
+                                  const gchar *name)
+{
+  GtkSettingsPrivate *priv = settings->priv;
+  GParamSpec *pspec;
+  GValue val = G_VALUE_INIT;
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (settings), name);
+  if (!pspec)
+    return GTK_SETTINGS_SOURCE_DEFAULT;
+
+  if (priv->property_values[pspec->param_id - 1].source == GTK_SETTINGS_SOURCE_APPLICATION)
+    return GTK_SETTINGS_SOURCE_APPLICATION;
+
+  /* We never actually store GTK_SETTINGS_SOURCE_XSETTING as a source
+   * value in the property_values array - we just try to load the xsetting,
+   * and use it when available. Do the same here.
+   */
+  g_value_init (&val, G_TYPE_STRING);
+  if (gdk_screen_get_setting (priv->screen, pspec->name, &val))
+    {
+      g_value_unset (&val);
+      return GTK_SETTINGS_SOURCE_XSETTING; 
+    }
+
+  return priv->property_values[pspec->param_id - 1].source;  
+}
index d44e72241854a6bd834ec8a8757aebc7aaf8be87..4ba07cd2b83c91baada54e56506fa2a201c95c2e 100644 (file)
@@ -40,6 +40,16 @@ gboolean            _gtk_settings_parse_convert              (GtkRcPropertyParse
 GdkScreen          *_gtk_settings_get_screen                 (GtkSettings            *settings);
 GtkStyleCascade    *_gtk_settings_get_style_cascade          (GtkSettings            *settings);
 
+typedef enum
+{
+  GTK_SETTINGS_SOURCE_DEFAULT,
+  GTK_SETTINGS_SOURCE_THEME,
+  GTK_SETTINGS_SOURCE_XSETTING,
+  GTK_SETTINGS_SOURCE_APPLICATION
+} GtkSettingsSource;
+
+GtkSettingsSource  _gtk_settings_get_setting_source (GtkSettings *settings,
+                                                     const gchar *name);
 
 G_END_DECLS